由浅入深,聊聊 LeakCanary 的那些事
全部标签一、error是什么?在C中,返回错误通过errno.h中的错误代码来表示,比如0代表Noerror,也就是没有错误;2代表Nosuchfileordirectory,也就是找不到指定路径的文件或文件夹;5代表Input/Outputerror,表示输入或输出出现了错误...而在我们最爱的Golang中,有这样一个饱受争议的error类型,它不是一个整数,而是一个接口。packagemainimport("errors""fmt")typenamestruct{errorstring}func(n*name)Error()string{returnfmt.Sprintf("%s:...",n.
一、UDP网络编程:1.1流程服务器流程:创建用户数据报套接字填充服务器的网络信息结构体绑定套接字与服务器网络信息结构体收发数据关闭套接字客户端流程:创建用户数据报套接字填充服务器的网络信息结构体收发数据关闭套接字二、基于UDP的网络群聊聊天室 2.1功能:有新用户登录,其他在线的用户可以收到登录信息有用户群聊,其他在线的用户可以收到群聊信息有用户退出,其他在线的用户可以收到退出信息服务器可以发送系统信息提示:客户端登录之后,为了实现一边发送数据一边接收数据,可以使用多进程或者多线程服务器既可以发送系统信息,又可以接收客户端信息并处理,可以使用多进程
目录一、粘包与拆包是什么?二、粘包与拆包为什么发生?三、遇到粘包、拆包怎么办?解决方案1:固定数据大小解决方案2:自定义请求协议解决方案3:特殊字符结尾 四、HTTP如何解决粘包问题的?4.1、读取请求行/请求头、响应行/响应头4.2、怎么读取body数据呢?4.2.1、 Content-Length描述4.2.2、 chunked描述4.2.3优/缺点TCP的粘包和拆包问题往往出现在基于TCP协议的通讯中,比如RPC框架、Netty等。一、粘包与拆包是什么?TCP在接受数据的时候,有一个滑动窗口来控制接受数据的大小,这个滑动窗口你就可以理解为一个缓冲区的大小。缓冲区满了就会把数据发送。数据包
目录一、计划二、供应链三、IP四、技术一、计划A:你们项目组芯片什么时间TO?B:年底。A:MPW?B:直接FULLMASK。A:有钱。B:芯片面积太大,占了6个SEAT,况且年底没有合适时间点的shuttle。老大们就直接定了FULLMASK。A:牛X!TAPEOUT(TO):在IC设计和生产流程中,Fabless设计者一般会将集成电路设计的最终结果以GDSII格式记录的电路版图数据交给Foundry,这个动作叫做TapeOut,俗称流片(投片)。代工厂根据集成电路版图对半导体晶圆进行加工,加工的过程非常复杂,包括通过氧化、化学刻蚀、离子注入掺杂、金属淀积等方法制造出晶体管和互连线,除此之外
一、前言介绍UIWebView是iOS2中推出的网页容器,UIWebView是最占内存的控件;直到iOS8以后,苹果推出了WebKit框架,其中WKWebView正式被推出来接替UIWebView的位置;iOS12中,苹果正式弃用UIWebView,要求开发者用WKWebView全面替换UIWebView,apple官方文档二、特点对比UIWebView特点:1、加载速度慢2、内存占用大,App停留在后台很容易被系统杀死3、原生容器完全不带进度条,需要自定义开发WKWebView特点:1、在性能、稳定性、功能方面有很大提升(最直观的提升就是加载网页是占用的内存很少,测试加载不同网页其内存性能提
致前行的人: 人生像攀登一座山,而找寻出路,却是一种学习的过程,我们应当在这过程中,学习稳定冷静,学习如何从慌乱中找到生机。目录1.C++11简介 2.统一的列表初始化2.1{}初始化编辑 2.2std::initializer_list3.声明3.1auto3.2decltype 3.3nullptr4范围for循环5.STL中一些变化 6右值引用和移动语义6.1左值引用和右值引用6.2左值引用与右值引用比较6.3右值引用使用场景和意义6.4右值引用引用左值及其一些更深入的使用场景分析6.5完美转发7.新的类功能8.lambda表达式8.1lambda表达式语法8.2 函数对
从之前的RNN系列到现在的Transformer模型,是一个演进的过程,技术的实现与迭代并不是一蹴而就,而是一个持续演进的历程。如果一开始就从Tranformer的模型机制来学习,知识的不全面以及欠缺就会导致懵逼甚至看不懂又不理解。RNN系列:聊聊RNN&LSTM聊聊RNN与seq2seq聊聊RNN与Attention以下内容摘自《BERT基础教程:Transformer大模型实战》概述循环神经网络和长短期记忆网络已经广泛应用于时序任务,比如文本预测、机器翻译、文章生成等。然而,它们面临的一大问题就是如何记录长期依赖。为了解决这个问题,一个名为Transformer的新架构应运而生。从那以后,
C生万物|从浅入深理解指针【第三部分】前言:如果没有看过第一部分的话,推荐先看第二部分,然后再来看第三部分~~文章目录C生万物|从浅入深理解指针【第三部分】前言:一、字符指针变量二、数组指针变量2.1数组指针变量是什么?2.2数组指针变量怎么初始化三、二维数组传参的本质四、函数指针变量4.4函数指针变量的创建4,5函数指针变量的使用4.6两段有趣的代码4.7typedef关键字五、函数指针数组六、转移表一、字符指针变量在指针的类型中我们知道有一种指针类型为字符指针char*;我们这里定义了ch变量,里面存了个字符w然后我将这个变量的地址取出来放到pc里,它的类型是char*,pc就是字符指针变
我想更好地理解node_modules之间的关系,这些node_modules是我在本地计算机上的Node项目的一部分,而那些是我驻留在Heroku上的应用程序的一部分。当我在本地构建和测试项目时(在我的机器上,使用我的localhost),我需要下载各种Node模块(例如,mongodb,mongoose、util、express等)。当我在本地测试我的应用程序后,我想将它推送到服务器。当我进行推送时,node_modules文件夹也会被推送。如果我已经通过我的帐户在Heroku上安装了MongoDB(通过HerokuMongoLab附加组件)和Mongoose会发生什么/app的仪
进程与线程「进程」是操作系统中正在运行的程序的实例。每个进程都有自己的内存空间和系统资源,并且可以独立地执行指令。进程可以包含一个或多个线程,线程是进程中的执行单元,负责执行具体的任务。在操作系统中,进程是资源分配的基本单位。操作系统通过调度算法来管理和控制进程的执行顺序,以实现多任务并发执行。进程之间可以通过进程间通信(IPC)机制进行数据交换和协作。每个进程都有一个唯一的进程标识符(PID),用于在操作系统中标识和管理进程。进程可以处于不同的状态,如运行态、就绪态、阻塞态等,根据进程的状态和优先级,操作系统会进行相应的调度和管理。进程的创建和销毁是动态的,可以根据需要动态地创建和销毁进程。